attribute vec3 pos;
attribute vec2 texcoord;
attribute vec3 normal;

uniform mat4 M;
uniform mat4 P;
uniform mat4 V;
uniform mat4 NM;

uniform vec3 U_LightPos;
uniform vec3 U_EyePos;
uniform vec4 U_DiffuseLightColor;
uniform vec4 U_DiffuseMaterial;
uniform vec4 U_SpecularLightColor;
uniform vec4 U_SpecularMaterial;

varying vec4 V_DiffuseColor;
varying vec4 V_SpecularColor;

void main()
{
	//L vecotr
	vec3 L = U_LightPos;
	L = normalize(L);
	//N vector
	vec3 n = normalize(mat3(NM) * normal);

	float diffuseIntensity = max(0.0, dot(L, n));
	V_DiffuseColor = U_DiffuseLightColor * U_DiffuseMaterial * diffuseIntensity;

	//specular
	//reflection
	vec3 reflectDir = reflect(-L, n);
	reflectDir = normalize(reflectDir);
	//inverse view direction : object->eye
	vec4 worldPos = M * vec4(pos, 1.0);
	vec3 viewDir = U_EyePos - worldPos.xyz;
	viewDir = normalize(viewDir);

	V_SpecularColor = U_SpecularLightColor * U_SpecularMaterial * pow(max(0.0, dot(viewDir, reflectDir)), 28.0);

	gl_Position = P * V * worldPos;
}
